package cn.jia.stomp.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.StompBrokerRelayRegistration;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

/**
 * @Author: jia
 * @Descirption:
 * @Date: 2018/4/25 9:18
 * @Modified By:
 */

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketStompConfig extends AbstractWebSocketMessageBrokerConfigurer{
    //配置stomp服务端点连接地址
    //client 连接地址和 发送地址是不同的，以本例为例，前者是/server/hello, 后者是/server/app/XX，先连接后发送）
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/hello").withSockJS();
    }
    //配置代理路径和应用程序路径,如果不重载这个方法，默认情况下是以内存作为代理的，用来处理/topic为前缀
    // 的消息，如果重载了，消息代理将会处理，enableSimpleBroker中设置的变量
    //应用程序已/app为前缀，代理以/topic或者/queue开头
    @Override
    public void configureMessageBroker(org.springframework.messaging.simp.config.MessageBrokerRegistry registry) {
        //启用简单代理,可以直接以内存做代理，也可以已第三方插件做代理，如RabbitMQ
        registry.enableSimpleBroker("/topic","/queue");
        //使用中继代理：第三方插件，默认情况下监听的端口为61613，默认用户名密码为guest
       /* StompBrokerRelayRegistration relay = registry.enableStompBrokerRelay("/queue", "/topic");
        relay.setRelayPort(62623);
        relay.setRelayHost("rabbit.server");
        relay.setClientLogin("admin");
        relay.setClientPasscode("admin");*/

        //所有以/app开头的前缀会路由到@MessageMapping注解的方法中，而不会发到代理主题或者队列中。
        registry.setApplicationDestinationPrefixes("/app","/foo");
    }
}
